VideoClip是MoviePy中所有其它视频剪辑里最基本的种类。如果你只想编辑视频文件,你就永远不会用到它。当你想通过从别的库里生成的帧来生成动画时,这个类就会很有用。你需要做的只是定义一个make_frame(t)函数,使它返回一个HxWx3的numpy数组(8位整数)来代表时间t时的帧。这里是一个使用制图库Gizeh的例子:
import gizehimport moviepy.editor as mpydef make_frame(t):surface = gizeh.Surface(128,128) # width, heightradius = W*(1+ (t*(2-t))**2 )/6 # the radius varies over timecircle = gizeh.circle(radius, xy = (64,64), fill=(1,0,0))circle.draw(surface)return surface.get_npimage() # returns a 8-bit RGB arrayclip = mpy.VideoClip(make_frame, duration=2) # 2 secondsclip.write_gif("circle.gif",fps=15)注意,剪辑使用make_frame并没有一个精确的帧速率,所以你必须要为write_gif和write_videofile,以及需要遍历每一帧的方法提供帧速率(fps,每秒的帧数)。
VideoFileClip¶视频文件剪辑是由视频文件(支持大多数格式)或GIF文件中读取的剪辑。你可以像这样加载一个视频:
myclip = VideoFileClip("some_video.avi")myclip = VideoFileClip("some_animation.gif")注意,这些剪辑都有fps(帧速率)属性,当你对剪辑做小改动时,帧速率将会被传送,而且会以write_videofile、write_gif等的默认设置会使用。例如:
myclip = VideoFileClip("some_video.avi")print (myclip.fps) # prints for instance '30'# Now cut the clip between t=10 and 25 secs. This conserves the fps.myclip2 = myclip.subclip(10, 25)myclip2.write_gif("test.gif") # the gif will have 30 fps详见VideoFileClip。
ImageSequenceClip¶这是一种由一系列图片组成的剪辑,你可以这样调用:
clip = ImageSequenceClip(images_list, fps=25)